#include "bsp.h"


void led_init(void)
{
    GPIO_InitTypeDef GPIO_InitStruct;

    // LED0 PF9 PF10
    // 1、时钟使能
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);

    // 2、配置GPIO
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
    GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
    GPIO_InitStruct.GPIO_Speed = GPIO_High_Speed;
    GPIO_Init(GPIOF,&GPIO_InitStruct);
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10;
    GPIO_Init(GPIOF,&GPIO_InitStruct);

    // 3、使能GPIO
    GPIO_ResetBits(GPIOF,GPIO_Pin_9);
    GPIO_ResetBits(GPIOF,GPIO_Pin_10);
}


void button_exti_init(void)
{
    // PA0 高电平有效
    // 设置位默认低电平(下拉)
    GPIO_InitTypeDef GPIO_InitStruct;
    EXTI_InitTypeDef EXTI_InitStruct;
    NVIC_InitTypeDef NVIC_InitStruct;

    // 1、时钟使能
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);

    // 2、配置GPIO 输入 开漏 下拉
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN;
    GPIO_InitStruct.GPIO_OType = GPIO_OType_OD;
    GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_DOWN;
    GPIO_InitStruct.GPIO_Speed = GPIO_High_Speed;
    GPIO_Init(GPIOF,&GPIO_InitStruct);

    // 配置EXII
    // 配置映射
    SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA,EXTI_PinSource0);
    // 配置为中断 上升沿触发 
    EXTI_InitStruct.EXTI_Line = EXTI_Line0;
    EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt; 
    EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising;
    EXTI_InitStruct.EXTI_LineCmd = ENABLE;
    EXTI_Init(&EXTI_InitStruct);

    // 配置NVIC
    NVIC_InitStruct.NVIC_IRQChannel = EXTI0_IRQn;
    NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 3;
    NVIC_InitStruct.NVIC_IRQChannelSubPriority = 3;
    NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStruct);
}

void bsp_init(void)
{
    // 中断优先级分组 2 
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

    led_init();
    button_exti_init();
		
    // USART初始化
    bsp_InitUart();

    // eeprom初始化
    bsp_eeprom_at24cxx_Init();

    // adc初始化
    bsp_adc_init();

    // spi flash初始化
    bsp_spi_flash_w25qxx_Init();

//    // can初始化
//    bsp_can_init();

}




void bsp_idle(void)
{
    
}

